﻿/* mvcForum
 * Copyright (C) 2010-2011 Steen F. Tøttrup
 * http://mvcforum.org/
 */

using mvcForum.Core.Configuration;
using System;
using System.Collections.Generic;

namespace mvcForum.Core.Abstractions.Interfaces {

	/// <summary>
	/// Interface for the solution configuration.
	/// </summary>
	public interface IConfiguration {
		/// <summary>
		/// The number of topics to be shown on a page.
		/// </summary>
		Int32 TopicsPerPage { get; set; }
		/// <summary>
		/// The number of posts to be shown on a page.
		/// </summary>
		Int32 MessagesPerPage { get; set; }
		/// <summary>
		/// The default culture, this is used when creating a new user.
		/// </summary>
		String DefaultCulture { get; set; }
		/// <summary>
		/// The default timezone, this is used when creating a new user.
		/// </summary>
		String DefaultTimezone { get; set; }

		Boolean ShowDeletedMessages { get; set; }

		String SiteURL { get; set; }
		String RobotEmailAddress { get; set; }
		String RobotName { get; set; }
		/// <summary>
		/// Run the anti-spam tasks asyncrhonous or not.
		/// </summary>
		Boolean AsynchronousAntiSpam { get; set; }
		/// <summary>
		/// The max byte size of a given attachment.
		/// </summary>
		Int32 MaxFileSize { get; set; }
		/// <summary>
		/// The maximum number of bytes the user use for attachments.
		/// </summary>
		Int32 MaxAttachmentsSize { get; set; }
		/// <summary>
		/// The list of allowed file extensions.
		/// </summary>
		IList<String> AllowedExtensions { get; set; }
		/// <summary>
		/// The list of groups a new user will be added to.
		/// </summary>
		IList<Int32> NewUserGroups { get; set; }
		/// <summary>
		/// Should older post be shown to a user when replying to a post/topic.
		/// </summary>
		Boolean ShowOldPostsOnReply { get; set; }
		/// <summary>
		/// How many old posts should be shown when a user is replying to a post/topic.
		/// </summary>
		Int32 PostsOnReply { get; set; }
		/// <summary>
		/// Can the user defined the theme for the forum.
		/// </summary>
		Boolean AllowUserDefinedTheme { get; set; }
		/// <summary>
		/// The theme the board is using.
		/// </summary>
		String Theme { get; set; }

		Int32 SpamAverage { get; set; }
		/// <summary>
		/// Subject of the subscription mails.
		/// </summary>
		//String SubscriptionSubject { get; set; }
		/// <summary>
		/// Content of the subscription mails.
		/// </summary>
		//String SubscriptionBody { get; set; }
		void Save();
		Boolean Editable { get; }
		Boolean CheckForNews { get; set; }

		String Editor { get; set; }

		Boolean ShowOnlineUsers { get; set; }

		// Account settings
		Boolean UseForumAccountController { get; set; }

		Boolean AllowLocalUsers { get; set; }
		Boolean AllowSignUp { get; set; }
		Boolean RequireEmailValidation { get; set; }

		String ValidationSubject { get; set; }
		String ValidationBody { get; set; }

		String ForgottenPasswordSubject { get; set; }
		String ForgottenPasswordBody { get; set; }

		Boolean RequireRulesAccept { get; set; }
		String SignUpRules { get; set; }

		Boolean AllowOpenAuthUsers { get; set; }

		Boolean InformOnQuarantine { get; set; }

		String RedirectUrlLoggedIn { get; set; }
		String RedirectUrlLoggedOut { get; set; }
		String RedirectUrlRegistrered { get; set; }

		Boolean AllowQuickReply { get; set; }

		AdminAuthorNameSetting AuthorNameSetting { get; set; }
	}
}